﻿using System;
// 当实现多个接口时，有时成员标识符会有冲突。显式实现接口可以解决冲突。
namespace _051_显式接口实现
{
    interface I1 { void Foo(); }
    interface I2 { int Foo(); }
    public class Widget:I1,I2
    {
        public void Foo()
        {
            Console.WriteLine("Widget's implementation of I1.Foo");
        }
        int I2.Foo()
        {
            Console.WriteLine("Widget's implementation of I2.Foo");
            return 42;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // 因为I1和I2都有Foo标识符，Widget显式实现了I2的Foo方法。
            // 这是两个同名方法的在同一个类中同时存在。
            // 调用显式实现成员的唯一方法是先转换为相应的接口：
            Widget w = new Widget();
            w.Foo(); // Widget对I1.Foo的实现
            ((I1)w).Foo(); // Widget对I1.Foo的实现
            ((I2)w).Foo(); // Widget对I2.Foo的实现
            
            Console.ReadKey();
        }
    }
}
